home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Codigo / hh / rsource.exe / Hexen Source / P_LOCAL.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-22  |  10.8 KB  |  373 lines

  1.  
  2. //**************************************************************************
  3. //**
  4. //** p_local.h : Heretic 2 : Raven Software, Corp.
  5. //**
  6. //** $RCSfile: p_local.h,v $
  7. //** $Revision: 1.64 $
  8. //** $Date: 95/10/13 03:00:16 $
  9. //** $Author: cjr $
  10. //**
  11. //**************************************************************************
  12.  
  13. #ifndef __P_LOCAL__
  14. #define __P_LOCAL__
  15.  
  16. #ifndef __R_LOCAL__
  17. #include "r_local.h"
  18. #endif
  19.  
  20. #define STARTREDPALS    1
  21. #define STARTBONUSPALS  9
  22. #define STARTPOISONPALS 13
  23. #define STARTICEPAL        21
  24. #define STARTHOLYPAL    22
  25. #define STARTSCOURGEPAL 25
  26. #define NUMREDPALS      8
  27. #define NUMBONUSPALS    4
  28. #define NUMPOISONPALS    8
  29.  
  30. #define TOCENTER -8
  31. #define FLOATSPEED (FRACUNIT*4)
  32.  
  33. #define MAXHEALTH 100
  34. #define MAXMORPHHEALTH 30
  35. #define VIEWHEIGHT (48*FRACUNIT)
  36.  
  37. // mapblocks are used to check movement against lines and things
  38. #define MAPBLOCKUNITS   128
  39. #define MAPBLOCKSIZE    (MAPBLOCKUNITS*FRACUNIT)
  40. #define MAPBLOCKSHIFT   (FRACBITS+7)
  41. #define MAPBMASK                (MAPBLOCKSIZE-1)
  42. #define MAPBTOFRAC              (MAPBLOCKSHIFT-FRACBITS)
  43.  
  44. // player radius for movement checking
  45. #define PLAYERRADIUS 16*FRACUNIT
  46.  
  47. // MAXRADIUS is for precalculated sector block boxes
  48. // the spider demon is larger, but we don't have any moving sectors
  49. // nearby
  50. #define MAXRADIUS 32*FRACUNIT
  51.  
  52. #define GRAVITY FRACUNIT
  53. #define MAXMOVE (30*FRACUNIT)
  54.  
  55. #define USERANGE (64*FRACUNIT)
  56. #define MELEERANGE (64*FRACUNIT)
  57. #define MISSILERANGE (32*64*FRACUNIT)
  58.  
  59. typedef enum
  60. {
  61.     DI_EAST,
  62.     DI_NORTHEAST,
  63.     DI_NORTH,
  64.     DI_NORTHWEST,
  65.     DI_WEST,
  66.     DI_SOUTHWEST,
  67.     DI_SOUTH,
  68.     DI_SOUTHEAST,
  69.     DI_NODIR,
  70.     NUMDIRS
  71. } dirtype_t;
  72.  
  73. #define BASETHRESHOLD 100 // follow a player exlusively for 3 seconds
  74.  
  75. // ***** P_TICK *****
  76.  
  77. extern thinker_t thinkercap; // both the head and tail of the thinker list
  78. extern int TimerGame; // tic countdown for deathmatch
  79.  
  80. void P_InitThinkers(void);
  81. void P_AddThinker(thinker_t *thinker);
  82. void P_RemoveThinker(thinker_t *thinker);
  83.  
  84. // ***** P_PSPR *****
  85.  
  86. #define USE_MANA1    1
  87. #define USE_MANA2    1
  88.  
  89. void P_SetPsprite(player_t *player, int position, statenum_t stnum);
  90. void P_SetPspriteNF(player_t *player, int position, statenum_t stnum);
  91. void P_SetupPsprites(player_t *curplayer);
  92. void P_MovePsprites(player_t *curplayer);
  93. void P_DropWeapon(player_t *player);
  94. void P_ActivateMorphWeapon(player_t *player);
  95. void P_PostMorphWeapon(player_t *player, weapontype_t weapon);
  96.  
  97. // ***** P_USER *****
  98.  
  99. extern int PStateNormal[NUMCLASSES]; 
  100. extern int PStateRun[NUMCLASSES];
  101. extern int PStateAttack[NUMCLASSES]; 
  102. extern int PStateAttackEnd[NUMCLASSES];
  103.  
  104. void P_PlayerThink(player_t *player);
  105. void P_Thrust(player_t *player, angle_t angle, fixed_t move);
  106. void P_PlayerRemoveArtifact(player_t *player, int slot);
  107. void P_PlayerUseArtifact(player_t *player, artitype_t arti);
  108. boolean P_UseArtifact(player_t *player, artitype_t arti);
  109. int P_GetPlayerNum(player_t *player);
  110. void P_TeleportOther(mobj_t *victim);
  111. void ResetBlasted(mobj_t *mo);
  112.  
  113. // ***** P_MOBJ *****
  114.  
  115. // Any floor type >= FLOOR_LIQUID will floorclip sprites
  116. enum
  117. {
  118.     FLOOR_SOLID,
  119.     FLOOR_ICE,
  120.     FLOOR_LIQUID,
  121.     FLOOR_WATER,
  122.     FLOOR_LAVA,
  123.     FLOOR_SLUDGE
  124. };
  125.  
  126. #define ONFLOORZ MININT
  127. #define ONCEILINGZ MAXINT
  128. #define FLOATRANDZ (MAXINT-1)
  129. #define FROMCEILINGZ128 (MAXINT-2)
  130.  
  131. extern mobjtype_t PuffType;
  132. extern mobj_t *MissileMobj;
  133.  
  134. mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type);
  135. void P_RemoveMobj(mobj_t *th);
  136. boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
  137. boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state);
  138. void P_ThrustMobj(mobj_t *mo, angle_t angle, fixed_t move);
  139. int P_FaceMobj(mobj_t *source, mobj_t *target, angle_t *delta);
  140. boolean P_SeekerMissile(mobj_t *actor, angle_t thresh, angle_t turnMax);
  141. void P_MobjThinker(mobj_t *mobj);
  142. void P_BlasterMobjThinker(mobj_t *mobj);
  143. void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z);
  144. void P_SpawnBlood(fixed_t x, fixed_t y, fixed_t z, int damage);
  145. void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t *originator);
  146. void P_BloodSplatter2(fixed_t x, fixed_t y, fixed_t z, mobj_t *originator);
  147. void P_RipperBlood(mobj_t *mo);
  148. int P_GetThingFloorType(mobj_t *thing);
  149. int P_HitFloor(mobj_t *thing);
  150. boolean P_CheckMissileSpawn(mobj_t *missile);
  151. mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type);
  152. mobj_t *P_SpawnMissileXYZ(fixed_t x, fixed_t y, fixed_t z,
  153.     mobj_t *source, mobj_t *dest, mobjtype_t type);
  154. mobj_t *P_SpawnMissileAngle(mobj_t *source, mobjtype_t type,
  155.     angle_t angle, fixed_t momz);
  156. mobj_t *P_SpawnMissileAngleSpeed(mobj_t *source, mobjtype_t type,
  157.     angle_t angle, fixed_t momz, fixed_t speed);
  158. mobj_t *P_SpawnPlayerMissile(mobj_t *source, mobjtype_t type);
  159. mobj_t *P_SPMAngle(mobj_t *source, mobjtype_t type, angle_t angle);
  160. mobj_t *P_SPMAngleXYZ(mobj_t *source, fixed_t x, fixed_t y, 
  161.     fixed_t z, mobjtype_t type, angle_t angle);
  162. void P_CreateTIDList(void);
  163. void P_RemoveMobjFromTIDList(mobj_t *mobj);
  164. void P_InsertMobjIntoTIDList(mobj_t *mobj, int tid);
  165. mobj_t *P_FindMobjFromTID(int tid, int *searchPosition);
  166. mobj_t *P_SpawnKoraxMissile(fixed_t x, fixed_t y, fixed_t z,
  167.     mobj_t *source, mobj_t *dest, mobjtype_t type);
  168.  
  169. // ***** P_ENEMY *****
  170.  
  171. void P_NoiseAlert (mobj_t *target, mobj_t *emmiter);
  172. int P_Massacre(void);
  173. boolean A_RaiseMobj(mobj_t *actor);
  174. boolean A_SinkMobj(mobj_t *actor);
  175. void A_NoBlocking(mobj_t *actor);
  176. boolean P_LookForMonsters(mobj_t *actor);
  177. void P_InitCreatureCorpseQueue(boolean corpseScan);
  178. void A_DeQueueCorpse(mobj_t *actor);
  179.  
  180.  
  181. // ***** P_MAPUTL *****
  182.  
  183. typedef struct
  184. {
  185.     fixed_t x, y, dx, dy;
  186. } divline_t;
  187.  
  188. typedef struct
  189. {
  190.     fixed_t         frac;           // along trace line
  191.     boolean         isaline;
  192.     union {
  193.         mobj_t  *thing;
  194.         line_t  *line;
  195.     }                       d;
  196. } intercept_t;
  197.  
  198. #define MAXINTERCEPTS   128
  199. extern  intercept_t             intercepts[MAXINTERCEPTS], *intercept_p;
  200. typedef boolean (*traverser_t) (intercept_t *in);
  201.  
  202.  
  203. fixed_t P_AproxDistance (fixed_t dx, fixed_t dy);
  204. int     P_PointOnLineSide (fixed_t x, fixed_t y, line_t *line);
  205. int     P_PointOnDivlineSide (fixed_t x, fixed_t y, divline_t *line);
  206. void    P_MakeDivline (line_t *li, divline_t *dl);
  207. fixed_t P_InterceptVector (divline_t *v2, divline_t *v1);
  208. int     P_BoxOnLineSide (fixed_t *tmbox, line_t *ld);
  209.  
  210. extern  fixed_t opentop, openbottom, openrange;
  211. extern  fixed_t lowfloor;
  212. void    P_LineOpening (line_t *linedef);
  213.  
  214. boolean P_BlockLinesIterator (int x, int y, boolean(*func)(line_t*) );
  215. boolean P_BlockThingsIterator (int x, int y, boolean(*func)(mobj_t*) );
  216.  
  217. #define PT_ADDLINES             1
  218. #define PT_ADDTHINGS    2
  219. #define PT_EARLYOUT             4
  220.  
  221. extern  divline_t       trace;
  222. boolean P_PathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2,
  223.     int flags, boolean (*trav) (intercept_t *));
  224.  
  225. void    P_UnsetThingPosition (mobj_t *thing);
  226. void    P_SetThingPosition (mobj_t *thing);
  227. mobj_t *P_RoughMonsterSearch(mobj_t *mo, int distance);
  228.  
  229. // ***** P_MAP *****
  230.  
  231. extern boolean floatok;                         // if true, move would be ok if
  232. extern fixed_t tmfloorz, tmceilingz;    // within tmfloorz - tmceilingz
  233. extern int tmfloorpic;
  234. extern mobj_t *BlockingMobj;
  235.  
  236. extern line_t *ceilingline;
  237. boolean P_TestMobjLocation(mobj_t *mobj);
  238. boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y);
  239. mobj_t *P_CheckOnmobj(mobj_t *thing);
  240. void P_FakeZMovement(mobj_t *mo);
  241. boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y);
  242. boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y);
  243. void P_SlideMove(mobj_t *mo);
  244. void P_BounceWall(mobj_t *mo);
  245. boolean P_CheckSight(mobj_t *t1, mobj_t *t2);
  246. void P_UseLines(player_t *player);
  247. boolean P_UsePuzzleItem(player_t *player, int itemType);
  248. void PIT_ThrustSpike(mobj_t *actor);
  249.  
  250. boolean P_ChangeSector (sector_t *sector, int crunch);
  251.  
  252. extern mobj_t *PuffSpawned; // true if a puff was spawned
  253. extern  mobj_t          *linetarget;              // who got hit (or NULL)
  254. fixed_t P_AimLineAttack (mobj_t *t1, angle_t angle, fixed_t distance);
  255.  
  256. void P_LineAttack (mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, int damage);
  257.  
  258. void P_RadiusAttack (mobj_t *spot, mobj_t *source, int damage, int distance,
  259.     boolean damageSource);
  260.  
  261. // ***** P_SETUP *****
  262.  
  263. extern byte *rejectmatrix;                              // for fast sight rejection
  264. extern short *blockmaplump;                             // offsets in blockmap are from here
  265. extern short *blockmap;
  266. extern int bmapwidth, bmapheight;               // in mapblocks
  267. extern fixed_t bmaporgx, bmaporgy;              // origin of block map
  268. extern mobj_t **blocklinks;                             // for thing chains
  269.  
  270. // ***** P_INTER *****
  271.  
  272. extern int clipmana[NUMMANA];
  273.  
  274. void P_SetMessage(player_t *player, char *message, boolean ultmsg);
  275. void P_SetYellowMessage(player_t *player, char *message, boolean ultmsg);
  276. void P_ClearMessage(player_t *player);
  277. void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher);
  278. void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source,
  279.     int damage);
  280. void P_FallingDamage(player_t *player);
  281. void P_PoisonPlayer(player_t *player, mobj_t *poisoner, int poison);
  282. void P_PoisonDamage(player_t *player, mobj_t *source, int damage,
  283.     boolean playPainSound);
  284. boolean P_GiveMana(player_t *player, manatype_t mana, int count);
  285. boolean P_GiveArtifact(player_t *player, artitype_t arti, mobj_t *mo);
  286. boolean P_GiveArmor(player_t *player, armortype_t armortype, int amount);
  287. boolean P_GiveBody(player_t *player, int num);
  288. boolean P_GivePower(player_t *player, powertype_t power);
  289. boolean P_MorphPlayer(player_t *player);
  290.  
  291. // ***** AM_MAP *****
  292.  
  293. boolean AM_Responder(event_t *ev);
  294. void AM_Ticker(void);
  295. void AM_Drawer(void);
  296.  
  297. // ***** A_ACTION *****
  298. boolean A_LocalQuake(byte *args, mobj_t *victim);
  299. void P_SpawnDirt(mobj_t *actor, fixed_t radius);
  300. void A_BridgeRemove(mobj_t *actor);
  301.  
  302. // ***** SB_BAR *****
  303.  
  304. extern int SB_state;
  305. extern int ArtifactFlash;
  306. void SB_PaletteFlash(boolean forceChange);
  307.  
  308. // ===== PO_MAN =====
  309.  
  310. typedef enum
  311. {
  312.     PODOOR_NONE,
  313.     PODOOR_SLIDE,
  314.     PODOOR_SWING,
  315. } podoortype_t;
  316.  
  317. typedef struct
  318. {
  319.     thinker_t thinker;
  320.     int polyobj;
  321.     int speed;
  322.     unsigned int dist;
  323.     int angle;
  324.     fixed_t xSpeed; // for sliding walls
  325.     fixed_t ySpeed;
  326. } polyevent_t;
  327.  
  328. typedef struct
  329. {
  330.     thinker_t thinker;
  331.     int polyobj;
  332.     int speed;
  333.     int dist;
  334.     int totalDist;
  335.     int direction;
  336.     fixed_t xSpeed, ySpeed;
  337.     int tics;
  338.     int waitTics;
  339.     podoortype_t type;
  340.     boolean close;
  341. } polydoor_t;
  342.  
  343. enum
  344. {
  345.     PO_ANCHOR_TYPE = 3000,
  346.     PO_SPAWN_TYPE,
  347.     PO_SPAWNCRUSH_TYPE
  348. };
  349.  
  350. #define PO_LINE_START 1 // polyobj line start special
  351. #define PO_LINE_EXPLICIT 5
  352.  
  353. extern polyobj_t *polyobjs; // list of all poly-objects on the level
  354. extern int po_NumPolyobjs;
  355.  
  356. void T_PolyDoor(polydoor_t *pd);
  357. void T_RotatePoly(polyevent_t *pe);
  358. boolean EV_RotatePoly(line_t *line, byte *args, int direction, boolean 
  359.     overRide);
  360. void T_MovePoly(polyevent_t *pe);
  361. boolean EV_MovePoly(line_t *line, byte *args, boolean timesEight, boolean
  362.     overRide);
  363. boolean EV_OpenPolyDoor(line_t *line, byte *args, podoortype_t type);
  364.  
  365. boolean PO_MovePolyobj(int num, int x, int y);
  366. boolean PO_RotatePolyobj(int num, angle_t angle);
  367. void PO_Init(int lump);
  368. boolean PO_Busy(int polyobj);
  369.  
  370. #include "p_spec.h"
  371.  
  372. #endif // __P_LOCAL__
  373.